#include <stdio.h>	/* printf */
#include "comm.h"

#define SERVER_STRING "server received"

static char rbuf[MSG_QUEUE_MAXSIZE];

int main()
{
	int msgid = create_msg_queue();
	if (msgid < 0)
		return -1;
	
	printf("waitting for client message...\n");
	
	int len;
	while (1) {
		len = recv_msg_queue(msgid, CLIENT_ID, rbuf);
		if (len > 0) {
			rbuf[len + 1] = '\0';
			printf("server<==client[%d]: %s\n", len, rbuf);

			send_msg_queue(msgid, SERVER_ID, SERVER_STRING, sizeof(SERVER_STRING));
						
			if (rbuf[0] == 'e') {	/* 要确保server成功退出并销毁 */
				goto exit;
			}
		}
	}

exit:
	printf("message queue close success\n");

	/* 不要在未接收到数据时就手动Ctrl + C关闭server，这样没有销毁消息队列，
	   下次重新运行server时会报错文件已存在；这时你可以自行添加程序关闭时的后处理，
	   或者手动对comm.c中key手动再赋一个新值进行测试；
	   也可以用ipcs -q命令查看消息队列，然后用ipcrm -Q key值 来销毁之前残留的
	   消息队列后再尝试*/
	destroy_msg_queue(msgid);
	
	return 0;
}